<?php  
/*
TODO

формирование sm_ при заливке новой фотки
вывод фото одной галереи
редактирование фоток 

При добавлении секции сразу вставлять транслит (сохраняя подчеркивание) в таблицу
Генерить экшн action[modul][translited section name], если надо, переименовывать старый

---------------
Контроллер модуля. 

Унаследован от шаблона контроллеров модулей 
Вызывает свою модель 
Вызывает свое представление

Генерит хтмл или ошибку 
*/
 
 
// контроллер вызывает модель, затем представление 
// и формирует output, а также массив входных данных для виджетов array('widget_descriptor'=>array('param_name'=>param_value)) 
 
 
class LifeModul extends BasicModulController implements BasicModulControllerInterface {
// контроллер модуля

  

   // private $widget_inputdata_arr; // перенести в интерфейс BasicModulController

    function __construct($registry = null){
      
      $this->registry = $registry; 
  


      parent::__construct(); 
      
      $this->modul_id = $this->getModulIdByIndex(MODUL_INDEX);
      
      if(isset($this->registry) AND ($this->registry->get('virtual_modul_index')) != '')
         $this->life_modul_index = $this->registry->get('virtual_modul_index'); 
      elseif(isset($this->registry) AND ($this->registry->get('modul_index')) != '')   
        $this->life_modul_index = $this->registry->get('modul_index'); 
       
      // $this->life_modul_index // 'about' 
      $this->modul_index = $this->registry->get('modul_index'); // 'Life'
       
      // [?] виджеты 
      $this->widget_enter_data = array();
      $this->widget_enter_data['widget'] = array('1'=>'a'); //var_dump($this->widget_enter_data);

      // инициализация модели
      $this->model = new Life; // [!] подставлять переменную с именем модуля

      // инициализация представления
      $class_name = $this->modul_index . "View";

      $ModulView = new $class_name($this->modul_id); // [!] подставлять переменную с именем можудя
      $this->global_view = $ModulView->getView(); // глобальное представление
      $this->view = $ModulView; // представление модуля
      
      // установка переменных, полученных из модели
      //$this->view->Set('asd',1234);
      
      self::$instance = $this;


      // генерация html
      // [!] закоментить после запуска Фабрики
      //$this->html = $this->view->render();
      
      // Меню слева 
      

      //  fb(  $this->getSections() );
      /*
      $this->sections_arr = $this->getSections();  

      if(is_array($this->sections_arr))
        $this->view->Set('sections',$this->sections_arr);
      else   
        $this->view->Set('sections',null);
       */
      
      // DONE Этим должно заниматься view данного модуля, а здесь - просто рендерить
      //$left_menu = $this->view->Get('inc_navigator.tpl');
       
      //$this->global_view->Set('left_menu',$left_menu);
      
      
    } // -- __construct
    
    
    function getHtml(){
        return $this->html;
    }
    
    // [!] сделать, чтобы рендерился шаблон модуля и шаблон отдельно главный
    // попробовать взять смарти из реестра или создать второй объект
     
    
    
    
    
    public static function getInstance(){
    // [!] метод обязателен для каждого модуля
        if (!isset(self::$instance)) { 
            $className = __CLASS__;
            self::$instance = new $className;
        }
  
        return self::$instance;
    } // --
    
    static function action(){

        $obj = static::getInstance();
        $method = $obj->action;



        if( !method_exists($obj, $method) ) throw new Exception('No action exists' . "[$method]");

        $obj->$method();  

    } // --
    
    // 
    public static function getView(){
        $obj = static::getInstance();
        return $obj->view;
    }



     
    // -------- Actions ---------- 
    
    function actionLifeBasic(){ 
    // $this->action = 'actionLifeBasic'
   
        $this->actionLifeFotodnja();
      
        //$this->html =  $this->view->render();
        
    } // --

    /*
    function action_LifeBasic(){
    // точка входа для виртуального модуля _life
        $this->html =  ' точка входа для виртуального модуля _life';

    } // --
    */



    
    
    function actionLifeFotodnja(){   
        
       
        $action = 'fotodnya';
        $this-> view->Set('action',$action); 
        $this->  global_view->Set('navhigh',$action); 
         
        $section_seo_name = preg_replace('/'."action".MODUL.'/','',__FUNCTION__); 
         
        if($this->getURIarg(2) == 'edit' AND User::isAdmin())
        // управление разделом
          $this->photoDayEdit();
        else {   
        // вывод контента в режиме гостя или пользователя
        
           if( ($galleries = $this->model->getGalleryBySectionId(array('actionMethod' => __FUNCTION__))) !== false){  
            if(is_array($galleries))
                 $this->view->Set('galleries',$galleries);
            }
           
              
          // fb($galleries); 
        
            $this->html =  $this->view->render();
        }
    } // --
    
    function actionLifeOtdyh(){ 
         dsb('fv');
        $action = 'otdih';
        $this-> view->Set('action',$action); 
        $this->  global_view->Set('navhigh',$action); 
         
        if($this->getURIarg(2) == 'edit' AND User::isAdmin())
        // управление разделом
          $this->photoOtdyhEdit(); 
        else {
         
       
            if( ($galleries = $this->model->getGalleryBySectionId(array('actionMethod' => __FUNCTION__))) !== false){ 
            if(is_array($galleries))
                 $this->view->Set('galleries',$galleries);
            }        
            
            $this->html =  $this->view->render();
        }
    } // --
    
    function actionLifeUpdatePhoto(){  
    
      if(!User::isAdmin()) return null; 
      
      if(!isset($_POST)) return null;
      if(!isset($_POST['image'])) return null;
      
      foreach($_POST['image'] as $photo_id => $arr){
         if(isset($arr['delete'])) $this->model->dropPhoto($photo_id);
         else { 
          
             $arr['photo_id'] = $photo_id; 
              
             $this->model->updatePhoto($arr);   
         }
      }
      
      $section_id = $_POST['section_id'];
      $section_seo_name = $this->model->getSectionSeonameById($section_id);
      
      //fb($section_seo_name);
      
      header('Location:/'.MODUL.'/'.$section_seo_name.'/edit');
      
     
      
    
      
      return false;
    }
    
    // --------------------------------- photoOtdyhEdit
    
    private function photoOtdyhEdit(){ 
        
        $message = '';
        
         if( ($galleries = $this->model->getGalleryBySectionId(array('actionMethod' => __FUNCTION__))) !== false){ 
            if(is_array($galleries))
                 $this->view->Set('galleries',$galleries);
            }    
        
       
        $this->view->Set('new_photo_form_action',"/".MODUL."/storePhoto/new");
        $this->view->Set('update_photo_form_action',"/".MODUL."/updatePhoto");
       //fb($galleries);
        if( ($galleries = $this->model->getGalleryBySectionId()) !== false){ 
            if(is_array($galleries))
              //if(count($galleries) == 1 AND $galleries[0]['photos'] == '-1'){$this->view->Set('galleries',-1);}else
              
                 $this->view->Set('galleries',$galleries);
            }  
          
        $this->view->Set('message',$message);  
    
          
        $this->html = $this->view->fetch('edit.tpl');
        
        return false;
    }
    
    private function photoDayEdit(){ 
    
        //if(!User::isAdmin()) return null;
    
        $message = '';
        
         if( ($galleries = $this->model->getGalleryBySectionId(array('actionMethod' => __FUNCTION__))) !== false){ 
            if(is_array($galleries))
                 $this->view->Set('galleries',$galleries);
            }    
        
       
        $this->view->Set('new_photo_form_action',"/".MODUL."/storePhoto/new");
        $this->view->Set('update_photo_form_action',"/".MODUL."/updatePhoto");
       //fb($galleries);
        if( ($galleries = $this->model->getGalleryBySectionId()) !== false){ 
            if(is_array($galleries))
              //if(count($galleries) == 1 AND $galleries[0]['photos'] == '-1'){$this->view->Set('galleries',-1);}else
              
                 $this->view->Set('galleries',$galleries);
            }  
          
        $this->view->Set('message',$message);  
        //$this->view->Set('section_id',$this->registry->get('section_id'));  
       // $this->view->Set('gallery_id',$this->registry->get('section_id'));  
          
        $this->html = $this->view->fetch('edit.tpl');
    } // --
    
    
     function actionLifeStorePhoto (){   
      
      if(!User::isAdmin()) return null;
    
      $result = false;
    
      if($this->getURIarg(2) == 'new'){
        if(isset( $_FILES['photo'] ) AND $_FILES['photo']['name'] != ''){
          $info = array('title'=> $_POST['photo']['title'],
                        'text'=> $_POST['photo']['text'],
                        'modul_id'=> $this->model->getModulidByName(MODUL),
                        'section_id'=> $_POST['section_id'],
                        'gallery_id'=> $_POST['gallery_id'], 
                        'width'=> 600,
                        'width_sm'=> 200,
                        'height_sm'=> 300,
                        'sort'=> 10
                        );  //fb($info);return;      
          $result = $this->model->insertPhoto($_FILES['photo'],$info);
        }
        
        if($result === false){
          $this->view->Set('message','Cant load photo');
          $this->view->Set('galleries',null);
          $this->html =  $this->view->render('edit.tpl');          
        } else   {  
            $section_seo_name = $this->model->getSectionSeonameById($_POST['section_id']);
            header('Location:/'.MODUL.'/'.$section_seo_name.'/edit');
        }
      } elseif (is_numeric($this->getURIarg(2))){
      
      }
      
      return false;
    }
    
    
    

 





















    
    
}

    
 
?>